/***********************************************************************
 * Module:  Station.java
 * Author:  Simon
 * Purpose: Defines the Class Station
 ***********************************************************************/

package Modele;

import java.util.*;

import DAO.DAOStationnement;

/** Objet définissant les stations */
public class Station {
	/** Identifiant de la station */
	private int idStation;
	/** Intitulé de la station */
	private String intitule;
	/** Nombre max de vélos que peut accueillir la station */
	private int nbMaxVelo;
	/** Coordonnées X de la station */
	private double coordX;
	/** Coordonnées Y de la station */
	private double coordY;
	/** Flag d'activité */
	private boolean estActif;

	/**
	 * Instancie une nouvelle station
	 * 
	 * @param intitule
	 *            Intitulé de la station
	 * @param nbMaxVelo
	 *            Nombre maximal de vélos que peut accueillir la station
	 * @param coordX
	 *            Coordonnées X de la station
	 * @param coordY
	 *            Coordonnées Y de la station
	 * @param estActif
	 *            Le flag d'activité
	 */

	public Station(String intitule, int nbMaxVelo, double coordX,
			double coordY, boolean estActif) {

		this.intitule = intitule;
		this.nbMaxVelo = nbMaxVelo;
		this.coordX = coordX;
		this.coordY = coordY;
		this.estActif = estActif;
	}

	/**
	 * Instancie une nouvelle station
	 * 
	 * @param idStation
	 *            Identifiant de la station
	 * @param intitule
	 *            Intitulé de la station
	 * @param nbMaxVelo
	 *            Nombre maximal de vélos que peut accueillir la station
	 * @param coordX
	 *            Coordonnées X de la station
	 * @param coordY
	 *            Coordonnées Y de la station
	 * @param estActif
	 *            Le flag d'activité
	 */

	public Station(int idStation, String intitule, int nbMaxVelo,
			double coordX, double coordY, boolean estActif) {

		this.idStation = idStation;
		this.intitule = intitule;
		this.nbMaxVelo = nbMaxVelo;
		this.coordX = coordX;
		this.coordY = coordY;
		this.estActif = estActif;
	}

	/**
	 * Renvoie l'identifiant de la station
	 * 
	 * @return L'identifiant
	 */
	public int getIdStation() {
		return idStation;
	}

	/**
	 * Renvoie l'intitulé de la station
	 * 
	 * @return L'intitulé
	 */
	public String getIntitule() {
		return intitule;
	}

	/**
	 * Assigne l'intitulé de la station
	 * 
	 * @param newIntitule
	 *            Le nouvel intitulé
	 */
	public void setIntitule(String newIntitule) {
		intitule = newIntitule;
	}

	/**
	 * Renvoie le nombre maximal de vélos que peut accueillir la station
	 * 
	 * @return Le nombre maximal de vélos
	 */
	public int getNbMaxVelo() {
		return nbMaxVelo;
	}

	/**
	 * Assigne le nombre maximal de vélos que peut accueillir la station
	 * 
	 * @param newNbMaxVelo
	 *            Le nouveau nombre maximal de vélos
	 */
	public void setNbMaxVelo(int newNbMaxVelo) {
		nbMaxVelo = newNbMaxVelo;
	}

	public double getCoordX() {
		return coordX;
	}

	/**
	 * Assigne la coordonnée X
	 * @param newCoordX
	 *            La nouvelle coordonnée X
	 */
	public void setCoordX(int newCoordX) {
		coordX = newCoordX;
	}

	public double getCoordY() {
		return coordY;
	}

	/**
	 * Assigne la coordonnée Y
	 * @param newCoordY
	 *            La nouvelle coordonnée Y
	 */
	public void setCoordY(int newCoordY) {
		coordY = newCoordY;
	}

	/**
	 * Renvoie la liste des stationnements
	 * 
	 * @return La liste des stationnements
	 */

	public ArrayList<Stationnement> getStationnements() {
		ArrayList<Stationnement> stationnements = new ArrayList<Stationnement>();

		for (Stationnement stat : DAOStationnement.getAllStationnement()) {
			if (stat.getIdStation() == getIdStation())
				stationnements.add(stat);
		}

		return stationnements;
	}

	/**
	 * Renvoie la liste des stationnements actuels
	 * 
	 * 
	 * @return La liste des stationnements actuels
	 */
	public ArrayList<Stationnement> getStationnementsActuels() {

		ArrayList<Stationnement> stationnementsActuels = new ArrayList<Stationnement>();

		for (Stationnement stat : getStationnements()) {
			if (stat.getDateDeDebut().before(new Date())
					&& (stat.getDateDeFin() == null || stat.getDateDeFin()
							.after(new Date())))
				stationnementsActuels.add(stat);
		}

		return stationnementsActuels;
	}

	/**
	 * Renvoie le flag d'activité
	 * 
	 * @return Le flag d'activité
	 */
	public boolean getEstActif() {
		return estActif;

	}

	/**
	 * Assigne le flag d'activité
	 * 
	 * 
	 * @param newEstActif
	 */
	public void setEstActif(boolean newEstActif) {
		estActif = newEstActif;

	}

	/**
	 * Renvoie l'intitulé
	 */
	@Override
	public String toString() {
		return getIntitule();
	}
}